package Controlador;

import Dao.DaoCooperativa;
import Dao.DaoRutaCoop;
import Dao.DaoRutas;
import Modelo.Listas;
import Modelo.Ruta_Coop;
import Vista.JFrameRutaCoop;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorRutaCoop implements ActionListener, KeyListener {

    private boolean Existe;

    private JFrameRutaCoop formRtCp;
    private int i;
    private Ruta_Coop rutacoop;

    public ControladorRutaCoop() throws SQLException {
        formRtCp = new JFrameRutaCoop();
        formRtCp.agregarListener(this);
        formRtCp.setVisible(true);
        formRtCp.setLocationRelativeTo(null);
        cargarRutas();
        cargarCoop();
    }

//------------------------------------------------------------------------------
    /* Sirve para hacer que se carguen el combo rif y el texto nombre desde
     el vector de rutas*/
    private void cargarRutas() throws SQLException {
        String cod;
        ResultSet registroRutas;
        DaoRutas daoRutas = new DaoRutas();
        registroRutas = daoRutas.ConsultarRutas();

        while (registroRutas.next()) {
            cod = registroRutas.getString("codigor");
            formRtCp.getCmbCodigoRA().addItem(cod);
        }

    }
//------------------------------------------------------------------------------
    /* Sirve para hacer que se carguen el combo codigo y el texto destino desde
     el vector de cooperativa*/

    private void cargarCoop() throws SQLException {
        String rif;
        ResultSet registroCoop;
        DaoCooperativa daoCoop = new DaoCooperativa();
        registroCoop = daoCoop.ConsultarCooperativa();
        while (registroCoop.next()) {
            rif = registroCoop.getString("rifc");
            formRtCp.getCmbRifCoop().addItem(rif);
        }
    }
//------------------------------------------------------------------------------    
    // carga la tabla con todo el vector

//------------------------------------------------------------------------------
    private void Grabar() throws SQLException {

        String rif, nom, cod, des;
        Ruta_Coop rtcp = new Ruta_Coop();
        rif = formRtCp.getCmbRifCoop().getSelectedItem().toString();
        nom = formRtCp.getTxtNombreCA().getText();
        cod = formRtCp.getCmbCodigoRA().getSelectedItem().toString();
        des = formRtCp.getTxtDestinoRA().getText();

        ResultSet rgRuta_Coop;
        DaoRutaCoop daoRutaCoop = new DaoRutaCoop();
        rgRuta_Coop = daoRutaCoop.ConsultarRuta_Coop();
        while(rgRuta_Coop.next())
        {
            if(rgRuta_Coop.getString("codigocoop").equals(rif)
               && rgRuta_Coop.getString("codigoruta").equals(cod))
            {
                Mensajes.Aviso("La ruta ya fue asignada a esta Cooperativa", "Aviso");
                formRtCp.getCmbCodigoRA().requestFocusInWindow();
                return;
            }
            else
            {
                rtcp.Ruta_Coop(formRtCp.getCmbCodigoRA().getSelectedItem().toString(), 
                                   formRtCp.getCmbRifCoop().getSelectedItem().toString(), 
                                   formRtCp.getTxtNombreCA().getText(), 
                                   formRtCp.getTxtDestinoRA().getText());
                daoRutaCoop.InsertarRuta_Coop(rutacoop);
                Mensajes.Aviso("La Ruta se asigno satisfactoriamente a la Cooperativa", "Asiganar Rutas");
                Limpiar();
                formRtCp.getCmbRifCoop().requestFocusInWindow();
                
            }
        }
    }

//------------------------------------------------------------------------------    
    /* carga la tabla con el vector asignado al rif seleccionado en el combo*/
    private void carga() throws SQLException {
        Ruta_Coop rtcp;
        String cadena;
        int fila;
        cadena = formRtCp.getCmbRifCoop().getSelectedItem().toString();

        ResultSet registroRuta_Coop;
        DaoRutaCoop daoRutaCoop = new DaoRutaCoop();
        registroRuta_Coop = daoRutaCoop.ConsultarRuta_Coop();

        //for (int i = 0; i < list.getListaRutaCoop().size(); i++) 
        while (registroRuta_Coop.next()) {
            for (fila = 0; fila < formRtCp.getjTableAsignadas().getRowCount(); fila++) {
                cadena = (String) formRtCp.getjTableAsignadas().getValueAt(fila, 0);
                if (cadena == null) {
                    break;
                }
            }//segundo for

            //rtcp = (Ruta_Coop) list.getListaRutaCoop().get(i);
            rtcp = (Ruta_Coop) registroRuta_Coop;
            if (rtcp.getCodigoCp().equals(formRtCp.getCmbRifCoop().getSelectedItem().toString())) {
                formRtCp.getjTableAsignadas().setValueAt(registroRuta_Coop.getString("codigocoop"), fila, 0);
                formRtCp.getjTableAsignadas().setValueAt(registroRuta_Coop.getString("nombrecoop"), fila, 1);
                formRtCp.getjTableAsignadas().setValueAt(registroRuta_Coop.getString("codigoruta"), fila, 2);
                formRtCp.getjTableAsignadas().setValueAt(registroRuta_Coop.getString("destinoruta"), fila, 3);
                fila++;
            }
        }//primer for
    }
//------------------------------------------------------------------------------  
    /* comboRif: sirve para actualizar el texto cooperativa segun 
     * el rif seleccionado*/

    private void comboRif() throws SQLException {
        String cadena;
        cadena = formRtCp.getCmbRifCoop().getSelectedItem().toString();
        ResultSet registroCoop;
        DaoCooperativa daoCoop = new DaoCooperativa();

        registroCoop = daoCoop.ConsultarCooperativa();
        while (registroCoop.next()) {
            if (registroCoop.getString("rifc").equals(cadena)) {
                formRtCp.getTxtNombreCA().setText(registroCoop.getString("nombrec"));
            }
        }
    }
//---------------------------------------------------------
    private void Limpiar()
    {
        formRtCp.getCmbCodigoRA().setSelectedItem("Seleccione:");
        formRtCp.getCmbRifCoop().setSelectedItem("Seleccione:");
        formRtCp.getTxtDestinoRA().setText("");
        formRtCp.getTxtNombreCA().setText("");
    }
    /* comboCodigoR: sirve para actualizar el texto destino 
     * segun el codigo seleccionado*/
    private void comboCodigoR() throws SQLException {
        String cadena;
        ResultSet registroRutas;
        DaoRutas daoRutas = new DaoRutas();
        registroRutas = daoRutas.ConsultarRutas();
        cadena = formRtCp.getCmbCodigoRA().getSelectedItem().toString();
        while (registroRutas.next()) {
            if (registroRutas.getString("codigor").equals(cadena));
            {
                formRtCp.getTxtDestinoRA().setText(registroRutas.getString("destino"));
            }
        }
    }

//********************************
    // Metodos Abstractos
//********************************
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formRtCp.getBtnSalirRC())) {
            formRtCp.dispose();
        }

        if (e.getSource().equals(formRtCp.getBtnGuardarRC())) {
            try {
                Grabar();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorRutaCoop.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formRtCp.getBtnCancelarRC())) 
        {
            Limpiar();
        }

        if (e.getSource().equals(formRtCp.getBtnBuscarRC())) {
            try {
                new ControladorConsulRutaCoop();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorRutaCoop.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        if (e.getSource().equals(formRtCp.getCmbRifCoop())) {
            String cadena;
            cadena = formRtCp.getCmbRifCoop().getSelectedItem().toString();
            if (cadena.equals("Seleccione:")) {
                formRtCp.getTxtNombreCA().setText("");
                formRtCp.getCmbCodigoRA().setSelectedItem("Seleccione:");
            }
            try {
                comboRif();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorRutaCoop.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formRtCp.getCmbCodigoRA())) {
            String cadena = formRtCp.getCmbCodigoRA().getSelectedItem().toString();
            if (cadena.equals("Seleccione:")) {
                formRtCp.getTxtDestinoRA().setText("");
            }
            try {
                comboCodigoR();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorRutaCoop.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        //-----------
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
}
